package com.team.RunsFast_Api.util;

import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.GeoUnit;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 邢朋辉
 * @Date: 2022/9/13 11:45
 */
public class JedisUtil {
    private static Jedis jedis;
    static {
        jedis=new Jedis("43.142.238.252",6379);
        jedis.auth("java2209");
    }
    //新增
    /**
     * 新增String类型
     * @param key 唯一
     * @param value 值*/
    public static void addString(String key,String value){
        jedis.set(key, value);
    }
    /**
     * 新增String类型，设置有效期 单位秒
     * @param seconds 有效期 秒数*/
    public static void addString(String key,String value,long seconds){
        jedis.setex(key,seconds, value);
    }


    public static void addHash(String key,String field,String val){
        jedis.hset(key,field,val);
    }
    public static void addHash(String key, Map<String,String> vals){
        jedis.hset(key,vals);
    }
    public static void addGeo(String key,double lon,double lat,String member){
        jedis.geoadd(key, lon, lat, member);
    }
    public static void addBitmap(String key,long index){
        jedis.setbit(key,index,true);
    }
    public static void addSet(String key,String val){
        jedis.sadd(key,val);
    }
    //查询
    public static String getString(String key){
        return jedis.get(key);
    }
    public static String getHash(String key,String field){
        return jedis.hget(key, field);
    }
    public static Map<String,String> getHash(String key){
        return jedis.hgetAll(key);
    }
    public static double getGeo(String key,String member1,String member2){
        return jedis.geodist(key,member1,member2, GeoUnit.KM);
    }
    public static long getBitmap(String key){
        return jedis.bitcount(key);
    }
    //验证
    public static boolean exists(String... keys){
        return jedis.exists(keys)>0;
    }
    public static boolean existsHash(String key,String field){
        return jedis.hexists(key, field);
    }
    public static boolean existsSet(String key,String val){
        return jedis.sismember(key, val);
    }
    //删除
    public static void delHash(String key,String field){
        jedis.hdel(key,field);
    }
    public static void delSet(String key,String val){
        jedis.srem(key,val);
    }
    public static void delKey(String... keys){
        jedis.del(keys);
    }
    /**
     * Geo类型：获取量点的距离
     * @param key 键
     * @param member1 地点1
     * @param member2 地点2
     * @return 距离（m）
     */
    public static Double getDist(String key,String member1,String member2){
        return jedis.geodist(key, member1, member2);
    }

    /**
     * Geo类型：获取指定经纬度匹配半径内的地点信息
     * @param key 键
     * @param longitude 经度
     * @param latitude 纬度
     * @param radius 半径
     * @param unit 单位
     * @return 在内的地点信息
     */
    public static List<GeoRadiusResponse> getRadius(String key, double longitude, double latitude, double radius, GeoUnit unit){

        return jedis.georadius(key, longitude, latitude, radius, unit);
    }

    /**
     * Geo类型：获取指定地点的经纬度
     * @param key 键
     * @param members 地点名
     * @return 经纬度
     */
    public static List<GeoCoordinate> getPos(String key, String... members){
        return jedis.geopos(key, members);
    }



    //设置有效器
    public static void expire(String key,long seconds){
        jedis.expire(key,seconds);
    }
    public static long ttl(String key){
        return jedis.ttl(key);
    }
}
